Michal Krzywkowski [Fri, 3 Aug 2018 08:22:18 +0000 (10:22 +0200)]
Fix placement of diagnostics with same start and end positions
Some servers such as cquery and clangd publish diagnostic with
identical start and end positions.
* eglot.el (eglot-handle-notification
:textDocument/publishDiagnostics): Add 1 to :line since LSP lines
are 0-based. Don't subtract 1 from :character, since both emacs and
LSP have 0-based columns.
João Távora [Thu, 2 Aug 2018 10:02:20 +0000 (11:02 +0100)]
Erase company-doc buffer in between doc requests
* eglot.el (eglot-completion-at-point): Erase temporary
"*eglot-doc*" buffer for company's doc.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/58
Michal Krzywkowski [Mon, 30 Jul 2018 20:17:32 +0000 (22:17 +0200)]
* eglot.el (eglot-client-capabilities): fix a typo.
Michal Krzywkowski [Tue, 10 Jul 2018 13:10:25 +0000 (15:10 +0200)]
Implement textdocument/rangeformatting
* eglot.el (eglot-format): New command.
(eglot-format-buffer): Use it as implementation.
(eglot-client-capabilities): Add :rangeFormatting.
* eglot-tests.el (formatting): Also test range formatting.
* README.md (Commands and keybindings): Mention eglot-format.
(Language features): Tick textDocument/rangeFormatting.
Michal Krzywkowski [Sat, 28 Jul 2018 17:14:02 +0000 (19:14 +0200)]
Correctly make lsp positions in narrowed buffers
* eglot.el (eglot--pos-to-lsp-position): Fix return value when
narrowing is in effect.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/54
Väinö Järvelä [Sat, 28 Jul 2018 17:03:05 +0000 (20:03 +0300)]
Fix typo in willsavewaituntil rpc request ()
Copyright-paperwork-exempt: yes
* eglot.el (eglot--signal-textDocument/willSave): Fix typo.
GitHub-reference: https://github.com/joaotavora/eglot/issues/51
Michal Krzywkowski [Sat, 28 Jul 2018 17:01:10 +0000 (19:01 +0200)]
Work around emacs bugs 32237, 32278 ()
See:
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=32237
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=32278
* eglot.el (eglot--apply-text-edits): Inhibit modification hooks and
call them manually for the changed region.
GitHub-reference: https://github.com/joaotavora/eglot/issues/53
João Távora [Fri, 27 Jul 2018 09:06:21 +0000 (10:06 +0100)]
Be less verbose when using eglot-ensure
* eglot.el (eglot-ensure): Don't message when a buffer is already
managed.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/48
Alan Zimmerman [Thu, 26 Jul 2018 10:32:24 +0000 (12:32 +0200)]
Add entry for haskell-ide-engine in eglot-server-programs ()
* eglot.el (eglot-server-programs): Add entry for haskell-mode
GitHub-reference: https://github.com/joaotavora/eglot/issues/49
João Távora [Wed, 25 Jul 2018 18:19:13 +0000 (18:19 +0000)]
Fix messages of eglot-ensure
* eglot.el (eglot-ensure): fix messages.
GitHub-reference: per https://github.com/joaotavora/eglot/issues/48
João Távora [Sun, 22 Jul 2018 18:07:43 +0000 (19:07 +0100)]
Don't turn on flymake-mode any more than is needed
If flymake-mode is in eglot--managed-mode-hook, it will be called even
if eglot--managed-mode is being turned off, which could be problematic
because it triggers a check if flymake-start-on-flymake-mode is t.
* eglot.el (eglot--managed-mode): Turn on flymake-mode and
eldoc-mode here.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/44
João Távora [Fri, 20 Jul 2018 16:45:47 +0000 (17:45 +0100)]
Robustify in the face of manual mode changes
When manually changing the major-mode of a managed buffer, this sends
a didClose and tears down Eglot-related stuff like if were killing the
buffer. After changing the mode, we have to recheck that we are now
not managed by another server (or by the same server, in case we
changed the mode to be the same mode).
* eglot.el (eglot-shutdown): Use eglot--with-live-buffer
(eglot--on-shutdown): Use eglot--with-live-buffer
(eglot--managed-mode): Use change-major-mode-hook.
(eglot--managed-mode-onoff): Change protocol. Turn off when called
with no arguments.
(eglot--maybe-activate-editing-mode): Don't do anything if mode is
already active. Suitable for calling from
after-change-major-mode-hook.
(after-change-major-mode-hook): Add
eglot--maybe-activate-editing-mode.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/44
João Távora [Wed, 11 Jul 2018 23:30:32 +0000 (00:30 +0100)]
Implement workspace/didchangeconfiguration ()
* README.md (Supported Protocol Features, Commands and
keybindings): mention workspace/didChangeConfiguration.
* eglot.el (eglot-server-initialized-hook): New hook.
(eglot--connect): Run it.
(eglot-workspace-configuration): New variable.
(eglot-signal-didChangeConfiguration): New command.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/29
GitHub-reference: close https://github.com/joaotavora/eglot/issues/40
João Távora [Wed, 11 Jul 2018 08:46:14 +0000 (09:46 +0100)]
Handle experimental/unknown server methods gracefully
* eglot.el (eglot-handle-notification t t, eglot-handle-request t
t): Add default handlers for unknown methods.
(eglot-handle-notification $cquery/progress)
(eglot-handle-notification $cquery/setInactiveRegions)
(eglot-handle-notification $cquery/publishSemanticHighlighting):
Remove these no-ops.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/39
João Távora [Mon, 9 Jul 2018 21:23:57 +0000 (22:23 +0100)]
Jsonrpc.el is now a gnu elpa depedency
* Makefile (ELFILES): Don't include jsonrpc.
(jsonrpc-check): Remove target.
(check): Don't run jsonrpc-check
* README.md (either): Mention "packaged in a single file" again
* eglot.el (Package-Requires): Require jsonrpc 1.0.0
(Version): Bump to 1.1
* jsonrpc.el: Remove
* jsonrpc-tests.el: Remove
João Távora [Sun, 8 Jul 2018 23:33:50 +0000 (00:33 +0100)]
* eglot.el (eglot-completion-at-point): fix broken indentation
Ricardo Martins [Sun, 8 Jul 2018 16:02:32 +0000 (17:02 +0100)]
Format documentation in completion annotations
Fixes an issue with the latest RLS, where the server returns a plist
instead of a plain string as documentation for completion candidates,
which broke the `annotation-function`. This change was introduced by
https://github.com/rust-lang-nursery/rls/commit/
206a9fb41e837333d0e67187a6a9fe24868b77a4
Copyright-paperwork-exempt: yes
* eglot.el (eglot-completion-at-point): Use eglot--format-markup
João Távora [Fri, 6 Jul 2018 17:39:20 +0000 (18:39 +0100)]
Unbreak completion when no possible annotation
* eglot.el (eglot-completion-at-point): Handle case where no doc,
detail or kind.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/37
João Távora [Mon, 2 Jul 2018 22:09:27 +0000 (23:09 +0100)]
Handle outrageously large and buggy line numbers
* eglot.el (eglot--lsp-position-to-point): Truncate line number to
most-positive-fixnum.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/34
João Távora [Sun, 1 Jul 2018 21:49:40 +0000 (22:49 +0100)]
Inhibit auto-reconnect until connection is established
Otherwise, a server that crashes on startup is enough to throw Eglot
into a reconnection infloop.
* eglot.el (eglot-lsp-server): Initialize "inhibit-autoreconnect"
slot to t.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/36
João Távora [Thu, 28 Jun 2018 22:30:39 +0000 (23:30 +0100)]
Bind default-directory when launching servers
Apparently, not doing so trips some servers, like Scala's.
* eglot.el (eglot--connect): Bind default-directory.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/33
João Távora [Mon, 25 Jun 2018 16:37:43 +0000 (17:37 +0100)]
Cache buffer's managing server
* eglot.el (eglot--cached-current-server): New variable.
(eglot--managed-mode-onoff): Set it.
(eglot--current-server): Read it.
(eglot--maybe-activate-editing-mode): Add assertion.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/32
João Távora [Mon, 25 Jun 2018 12:12:55 +0000 (13:12 +0100)]
Unbreak imenu for cquery servers (and probably more)
* eglot.el (eglot-imenu): Don't try to make a group for symbols
without kind.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/31
João Távora [Mon, 25 Jun 2018 12:02:03 +0000 (13:02 +0100)]
Unbreak basic imenu functionality
* eglot.el (eglot--managed-mode): Add missing quote to
imenu-create-index-function.
GitHub-reference: per https://github.com/joaotavora/eglot/issues/31
Ricardo Martins [Mon, 25 Jun 2018 11:51:10 +0000 (12:51 +0100)]
Fix typo in the solargraph server program
Copyright-paperwork-exempt: yes
* eglot.el (eglot-server-programs): Fix typo.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/30
João Távora [Sat, 23 Jun 2018 16:43:23 +0000 (17:43 +0100)]
Fix some rather silly bugs in some interactive specs
* eglot.el (eglot-events-buffer, eglot-stderr-buffer)
(eglot-forget-pending-continuations): Fix interactive specs.
João Távora [Sat, 23 Jun 2018 16:00:57 +0000 (17:00 +0100)]
Implement tcp autostart/autoconnect (and support ruby's solargraph)
* README.md (Installation and usage): Mention support for
Solargraph
(Connecting via TCP): New section
(Connecting automatically): New section
* eglot.el (eglot-server-programs): Add ruby-mode.
Overhaul docstring.
(eglot-lsp-server): Add inferior-process slot.
(eglot--on-shutdown): Kill any autostarted inferior-process
(eglot--guess-contact): Allow prompting with :autoport parameter.
(eglot--connect): Consider :autoport case.
(eglot--inferior-bootstrap): New helper.
João Távora [Fri, 22 Jun 2018 15:53:53 +0000 (16:53 +0100)]
Merge branch 'jsonrpc-refactor', bump version to 1.0
* eglot.el (Version): Bump to 1.0
João Távora [Fri, 22 Jun 2018 15:51:42 +0000 (16:51 +0100)]
* eglot.el (version): bump to 0.11
João Távora [Fri, 22 Jun 2018 15:44:09 +0000 (16:44 +0100)]
Merge master into jsonrpc-refactor (using imerge)
João Távora [Thu, 21 Jun 2018 22:32:14 +0000 (23:32 +0100)]
Empty ranges are valid in lsp
The previous hack in eglot--range-region, designed to appease cquery's
occasional practice of publishing diagnostics with empty regions, was
moved to the proper notification handler.
Reported by mkcms <k.michal@zoho.com>.
* eglot.el (eglot--range-region): Allow empty ranges, which are
allowed in LSP.
(eglot-handle-notification :textDocument/publishDiagnostics): Maybe
fallback to flymake-diag-region here.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/27
João Távora [Thu, 21 Jun 2018 16:48:10 +0000 (17:48 +0100)]
Apply text edits as a single undoable edit
As suggested by mkcms <k.michal@zoho.com>, but do it in
eglot--apply-text-edits, where it benefits all its users.
Also, just using undo-boundary is not enough, one needs
undo-amalgamate-change-group to mess with the boundaries already in
buffer-undo-list.
* eglot.el (eglot--apply-text-edits): Use
undo-amalgamate-change-group.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/22
João Távora [Thu, 21 Jun 2018 16:20:20 +0000 (17:20 +0100)]
Report progress when applying edits
Use make-progress-reporter in eglot--apply-text-edits
As suggested by mkcms <k.michal@zoho.com>, but do it in
eglot--apply-text-edits, where it benefits all its users.
* eglot.el (eglot--apply-text-edits): Use a progress reporter.
Fix marker point recovery.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/23
João Távora [Thu, 21 Jun 2018 13:53:50 +0000 (14:53 +0100)]
Apply text edits atomically
As suggested by mkcms <k.michal@zoho.com>, but do it in
eglot--apply-text-edits, where it benefits all its users.
* eglot.el (eglot--apply-text-edits): Use atomic-change-group.
GitHub-reference: per https://github.com/joaotavora/eglot/issues/22
João Távora [Thu, 21 Jun 2018 12:58:48 +0000 (13:58 +0100)]
Defer textdocument/formatting requests
* eglot.el (eglot-format-buffer): Pass DEFERRED to eglot--request.
João Távora [Wed, 20 Jun 2018 18:29:30 +0000 (19:29 +0100)]
Simplify eglot-format-buffer
Use replace-buffer-contents, as suggested by mkcms
<k.michal@zoho.com>, but do it in eglot--apply-text-edits, where it
benefits all its users.
* README.md (Commands and keybindings): Mention
eglot-format-buffer.
* eglot.el (eglot-format-buffer): Don't try to heuristically
preserve point here.
(eglot--apply-text-edits): Use replace-buffer-contents.
* eglot-tests.el (formatting): adjust test to strictly check for point
position.
GitHub-reference: per https://github.com/joaotavora/eglot/issues/22
João Távora [Wed, 20 Jun 2018 18:05:25 +0000 (19:05 +0100)]
Guess server for js2-mode and rjsx-mode
* eglot.el (eglot-server-programs): Add entries for js2-mode and
rjsx-mode. Coalesce entries for c++ and c-mode. Improve
docstring.
(eglot--guess-contact): Allow lists are keys in
eglot-server-programs.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/26
João Távora [Wed, 20 Jun 2018 17:47:45 +0000 (18:47 +0100)]
Improve eglot-ensure and mention it in readme.md
* README.md (Installation and Usage): Mention eglot-ensure.
* eglot.el (eglot-ensure): No-op for non-file buffers.
(eglot--connect): Don't fallback to 'eglot-lsp-server here.
(eglot--guess-contact): Error if something can't be guessed.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/25
Rami Chowdhury [Sat, 16 Jun 2018 22:59:57 +0000 (18:59 -0400)]
Use gfm-mode for formatted strings ()
* eglot.el (eglot--format-markup): Use gfm-mode instead of
markdown-mode.
Copyright-paperwork-exempt: yes
GitHub-reference: https://github.com/joaotavora/eglot/issues/20
João Távora [Fri, 15 Jun 2018 22:56:29 +0000 (23:56 +0100)]
Minor cleanup to new textdocument/formatting feature
* README.md (Language feature): Tick textDocument/formatting
* eglot.el (eglot-client-capabilities): Add formatting capability.
Also move codeAction capability to the correct section.
(eglot-format-buffer): Remove unused lexical variable before-point.
Michal Krzywkowski [Fri, 15 Jun 2018 22:47:52 +0000 (00:47 +0200)]
Implement formatting ()
Implement textDocument/formatting
* eglot.el (eglot-format-buffer): New command to format
current buffer.
* eglot-tests.el (formatting): New test.
GitHub-reference: https://github.com/joaotavora/eglot/issues/19
João Távora [Wed, 13 Jun 2018 17:48:41 +0000 (18:48 +0100)]
* eglot.el (version): bump to 0.10
João Távora [Wed, 13 Jun 2018 17:46:19 +0000 (18:46 +0100)]
Fix a bug when eglot--request times out
* eglot.el (eglot--request): Better timeout
message.
(eglot--async-request): Must return the timer.
João Távora [Wed, 13 Jun 2018 11:46:36 +0000 (12:46 +0100)]
* eglot.el (eglot-shutdown): accept timeout param.
João Távora [Wed, 13 Jun 2018 11:30:20 +0000 (12:30 +0100)]
Fix bug in querying server capabilities
This lead to javascript-typescript-stdio being sent an incremental
didChange notif, which it doesn't support.
* eglot.el (eglot--server-capable): Fix bug.
João Távora [Sun, 10 Jun 2018 13:57:02 +0000 (14:57 +0100)]
* eglot.el (version): bump to 0.9
João Távora [Sun, 10 Jun 2018 13:56:10 +0000 (14:56 +0100)]
Merge branch 'master' into jsonrpc-refactor
João Távora [Sun, 10 Jun 2018 12:41:10 +0000 (13:41 +0100)]
New eglot-ensure to put in a major-mode's hook
* eglot.el (Commentary): Mention eglo-ensure.
(eglot--connect): Rearrange args.
(eglot--guess-contact): Rename from eglot--interactive.
(eglot): Use eglot--guess-contact.
(eglot, eglot-reconnect): Rearrange call to eglot--connect.
(eglot-ensure): New command to put in mode hook.
* eglot-tests.el (eglot--tests-connect): New helper.
(auto-detect-running-server, auto-reconnect, rls-watches-files)
(rls-basic-diagnostics, rls-hover-after-edit, rls-rename)
(basic-completions, hover-after-completions): Use it.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/17
João Távora [Sun, 10 Jun 2018 06:31:45 +0000 (07:31 +0100)]
Remove connection grabbing antics from jsonrpc.el
* eglot.el (eglot--managed-mode): Don't touch
jsonrpc-find-connection-functions.
(eglot--current-server-or-lose, eglot--current-server): New
functions (resuscitate).
(eglot-shutdown, eglot, eglot-reconnect)
(eglot--server-capable, eglot--maybe-activate-editing-mode)
(eglot-clear-status, eglot--mode-line-format)
(eglot--signal-textDocument/didChange)
(eglot--signal-textDocument/didOpen)
(eglot--signal-textDocument/didSave)
(xref-backend-identifier-completion-table)
(xref-backend-definitions, xref-backend-references)
(xref-backend-apropos, eglot-completion-at-point)
(eglot-help-at-point, eglot-eldoc-function, eglot-imenu)
(eglot-rename, eglot-code-actions): Use eglot--current-server and
eglot--current-server-or-lose.
(eglot-events-buffer, eglot-stderr-buffer)
(eglot-forget-pending-continuations): New commands.
(eglot--mode-line-format): Use eglot-stderr-buffer.
* jsonrpc.el (jsonrpc-find-connection-functions)
(jsonrpc-current-connection, jsonrpc-current-connection-or-lose):
Remove.
(jsonrpc-stderr-buffer, jsonrpc-events-buffer): Simplify.
(jsonrpc-forget-pending-continuations): No longer interactive.
* eglot-tests.el (auto-detect-running-server, auto-reconnect): Use
eglot--current-server.
João Távora [Sun, 10 Jun 2018 06:16:41 +0000 (07:16 +0100)]
Simplify jsonrpc status setting
* eglot.el (eglot--connect): Don't set jsonrpc-status.
(eglot-clear-status): New interactive command.
(eglot--mode-line-format): Simplify.
* jsonrpc.el (jsonrpc--async-request-1): Simplify.
(jsonrpc-connection): Replace status with last-error.
(jsonrpc-clear-status): Delete.
(jsonrpc--connection-receive): Set last-error.
João Távora [Sat, 9 Jun 2018 20:19:13 +0000 (21:19 +0100)]
Request dispatcher's return value determines response
No more jsonrpc-reply.
* eglot.el (eglot-handle-request window/showMessageRequest):
Simplify.
(eglot--register-unregister): Simplify.
(eglot-handle-request workspace/applyEdit): Simplify.
(eglot--apply-text-edits): Signal a jsonrpc-error.
(eglot--apply-workspace-edit): Simplify.
* jsonrpc-tests.el (jsonrpc--with-emacsrpc-fixture): Don't
jsonrpc--reply.
* jsonrpc.el (jsonrpc-error, jsonrpc-connection, jsonrpc-request):
Improve docstring.
(jsonrpc-error): Polymorphic args.
(jsonrpc--unanswered-request-id): Remove.
(jsonrpc--connection-receive): Rework and simplify.
(jsonrpc-reply): Simplify.
João Távora [Sat, 9 Jun 2018 20:13:19 +0000 (21:13 +0100)]
Merge branch 'master' into jsonrpc-refactor
João Távora [Sat, 9 Jun 2018 20:12:48 +0000 (21:12 +0100)]
Fix indentation f@#$%^ by previous commit
Courtesy of aggressive-indent-mode... Agressive it is...
João Távora [Sat, 9 Jun 2018 20:09:03 +0000 (21:09 +0100)]
Attempt to handle rls sophisticated globs for didchangewwatchedfiles
* eglot.el (eglot--wildcard-to-regexp): New helper.
(eglot--register-workspace/didChangeWatchedFiles): Use it.
João Távora [Fri, 8 Jun 2018 17:58:34 +0000 (18:58 +0100)]
Check flymake-mode before calling report-fn
* eglot.el (eglot-handle-notification): Check flymake-mode.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/16
João Távora [Fri, 8 Jun 2018 17:48:06 +0000 (18:48 +0100)]
Merge master into jsonrpc-refactor
João Távora [Fri, 8 Jun 2018 17:37:54 +0000 (18:37 +0100)]
Simplify jsonrpc connection shutdown
* eglot.el (eglot--process): Delete.
(eglot-shutdown): Use jsonrpc-shutdown.
(eglot--on-shutdown): Simplify.
(eglot-reconnect): Simplify.
(eglot--connect): Simplify.
* jsonrpc-tests.el (jsonrpc--with-emacsrpc-fixture): Simplify.
* jsonrpc.el (jsonrpc-process-type, jsonrpc-running-p)
(jsonrpc-shutdown): New methods.
* eglot-tests.el (auto-reconnect): Use jsonrpc--process.
(eglot--call-with-dirs-and-files): Use jsonrpc-running-p.
João Távora [Fri, 8 Jun 2018 15:05:02 +0000 (16:05 +0100)]
Support json.c. api purely based on classes
No more jsonrpc-connect.
This is a big commit because of a data loss problem. It should be at
least two separate commits (json.c-support and new API)
* eglot.el (eglot-server-programs): Rework docstring.
(eglot-handle-request): Don't take ID param
(eglot-lsp-server): No more initargs.
(eglot--interactive): Return 5 args.
(eglot): Take 5 args.
(eglot-reconnect): Pass 6 args to eglot--connect.
(eglot--dispatch): Remove.
(eglot--connect): Take 6 args. Rework.
(eglot-handle-notification): Change all specializations
to use a non-keyword symbol spec.
(eglot-handle-request): Remove ID param from all
specializations. Don't pass ID to jsonrpc-reply.
(eglot--register-unregister): Don't take JSONRPC-ID arg.
Don't pass ID to jsonrpc-reply.
* jsonrpc-tests.el (returns-3, signals-an--32603-JSONRPC-error)
(times-out, stretching-it-but-works)
(json-el-cant-serialize-this, jsonrpc-connection-ready-p)
(deferred-action-intime, deferred-action-toolate)
(deferred-action-timeout): Pass JSON objects compatible with
json.c
(jsonrpc--test-client, jsonrpc--test-endpoint): New classes
(jsonrpc--with-emacsrpc-fixture): Don't use jsonrpc-connect.
(jsonrpc-connection-ready-p): Update signature.
* jsonrpc.el: Rewrite commentary.
(jsonrpc-connection): Rework class.
(jsonrpc-process-connection): Rework class.
(initialize-instance): New methods..
(jsonrpc--json-read, jsonrpc--json-encode): Reindent.
(jsonrpc-connect): Delete.
(jsonrpc--json-read, jsonrpc--json-encode):
New functions for working with json.c
(jsonrpc--process-filter): Call them.
(jsonrpc--unanswered-request-id): New variable.
(jsonrpc--connection-receive): Use jsonrpc--unanswered-request-id
(jsonrpc-connection-send): Take keyword params to build message
instead of message.
(jsonrpc-notify, jsonrpc--async-request-1): Use new
jsonrpc-connection-send.
(jsonrpc-reply): Simplify.
* eglot-tests.el (rls-watches-files, rls-basic-diagnostics)
(rls-hover-after-edit): Correctly compare using string= and
non-keyword symbols.
João Távora [Wed, 6 Jun 2018 11:04:39 +0000 (12:04 +0100)]
Slightly polish the flymake integration
For backends, like RLS, that don't textDocument/publishDiagnostics
right away, assume that the file is clean. Since Flymake allows
multiple reportings, it should be OK.
* eglot.el (eglot--unreported-diagnostics): Move variable up here.
(eglot--maybe-activate-editing-mode): Assume no diagnostics on
open.
João Távora [Wed, 6 Jun 2018 10:09:43 +0000 (11:09 +0100)]
* eglot.el (eglot--make-process): use 'utf-8-emacs-unix
Attempt to improve the situation reported in https://github.com/joaotavora/eglot/issues/14.
João Távora [Tue, 5 Jun 2018 18:13:46 +0000 (19:13 +0100)]
Merge master into jsonrpc-refactor (using imerge)
João Távora [Tue, 5 Jun 2018 16:28:03 +0000 (17:28 +0100)]
Shoosh compiler
* eglot.el (eglot-server-ready-p): Use cl-defmethod
João Távora [Tue, 5 Jun 2018 16:26:38 +0000 (17:26 +0100)]
Cleanup the flymake 26.1 hack slightly
* eglot.el (eglot-handle-notification): Use proper flymake
diagnostic types.
(eglot-code-actions): Use eglot--diag-data.
(eglot--make-diag, eglot--diag-data): New aliases to
`flymake-diagnostic-data' and `flymake-make-diagnostic'.
(eglot-error eglot-warning eglot-note)
(dolist eglot-error eglot-warning eglot-note): put
flymake-overlay-control in these.
(eglot-error eglot-warning eglot-note): put corresponding
flymake-category.
(horrible hack at the end): Move the Flymake 26.1 hack here.
João Távora [Mon, 4 Jun 2018 11:49:28 +0000 (12:49 +0100)]
Support purposedly ignoring a server capability
* eglot.el (eglot-ignored-server-capabilites): New defcustom.
(eglot--server-capable): Use it.
GitHub-reference: close https://github.com/joaotavora/eglot/issues/12
brotzeit [Mon, 4 Jun 2018 10:50:01 +0000 (12:50 +0200)]
Fix typos
Close https://github.com/joaotavora/eglot/issues/13.
* eglot.el (eglot--all-major-modes)
(eglot--notify, eglot--xref-reset-known-symbols): Fix typos.
João Távora [Sat, 2 Jun 2018 00:06:07 +0000 (01:06 +0100)]
Fix another merge-related bug in eglot-eldoc-function
* eglot.el (eglot-eldoc-function): Correctly destructure
eglot--range-region.
João Távora [Fri, 1 Jun 2018 23:58:10 +0000 (00:58 +0100)]
* eglot.el (eglot-eldoc-function): remove spurious log message
João Távora [Fri, 1 Jun 2018 16:58:00 +0000 (17:58 +0100)]
* eglot.el (version): bump to 0.8
João Távora [Fri, 1 Jun 2018 16:52:00 +0000 (17:52 +0100)]
Fix completionitem/resolve
Should fix interoperation with company-quickhelp.
* eglot.el (eglot-completion-at-point): Correctly pass properties
to completionItem/resolve.
João Távora [Fri, 1 Jun 2018 16:04:17 +0000 (17:04 +0100)]
Explicitly trigger eldoc after workspace edits
It's usually a nice thing to do.
* eglot.el (eglot--apply-workspace-edit): Call
eglot-eldoc-function.
João Távora [Fri, 1 Jun 2018 15:59:00 +0000 (16:59 +0100)]
New command m-x eglot-code-actions
Also available when left-clicking diagnostics.
* README.md: Mention eglot-code-actions. Slightly rewrite
differences to lsp-mode.
* eglot.el (eglot-code-actions): New command.
(eglot-handle-notification :textDocument/publishDiagnostics): Use
eglot--make-diag and eglot--overlay-diag-props.
(eglot--mode-line-props): Use eglot--mouse-call.
(eglot--mouse-call): Renamed from eglot--mode-line-call.
(eglot-client-capabilities): List :executeCommand and :codeAction
as capabilities.
(eglot--diag, advice-add flymake--highlight-line): Horrible hack.
(eglot--overlay-diag-props): Horrible hack.
João Távora [Fri, 1 Jun 2018 15:09:19 +0000 (16:09 +0100)]
Revert an unfinished feature that made it to the last commit
commit
ee6ab89666704232f744d6262040979b0142c44b
Author: João Távora <joaotavora@gmail.com>
Date: Fri Jun 1 14:43:30 2018 +0100
Add MELPA badge
João Távora [Fri, 1 Jun 2018 13:43:30 +0000 (14:43 +0100)]
Add melpa badge
* README.mdown: Now in MELPA too
João Távora [Fri, 1 Jun 2018 13:12:54 +0000 (14:12 +0100)]
Prevent possible cquery choke on :initializationoptions
Hopefully help debug https://github.com/joaotavora/eglot/issues/10.
* eglot.el (eglot-initialization-options): Use `list'
João Távora [Wed, 30 May 2018 15:27:30 +0000 (16:27 +0100)]
Merge master into jsonrpc-refactor (using imerge)
João Távora [Wed, 30 May 2018 02:20:54 +0000 (03:20 +0100)]
* eglot.el (version): bump to 0.7
João Távora [Mon, 28 May 2018 22:07:56 +0000 (23:07 +0100)]
More yak shaving
* eglot.el (eglot--with-live-buffer, eglot--widening): New macros.
(eglot--lambda): Move up here.
(eglot--process-filter): Simplify with eglot--with-live-buffer.
(eglot--async-request): Simplify with eglot--with-live-buffer.
(eglot--TextDocumentItem): Simplify with eglot--widening.
(eglot--signal-textDocument/didChange, eglot--apply-text-edits):
Simplify with eglot--widening.
João Távora [Mon, 28 May 2018 21:30:01 +0000 (22:30 +0100)]
New m-x eglot-stderr-buffer useful for debugging
* eglot.el (eglot--make-process): Save stderr buffer in process.
(eglot-stderr-buffer): New interactive command.
(eglot--mode-line-format): Bind C-mouse-1 to new
eglot-stderr-buffer.
João Távora [Sun, 27 May 2018 18:45:52 +0000 (19:45 +0100)]
On reconnection, ignore errors of shutting down hung server
* eglot.el
(eglot, eglot-reconnect): Ignore any errors on shutdown.
João Távora [Sun, 27 May 2018 15:51:15 +0000 (16:51 +0100)]
Be more criterious before running the idle timer
* eglot.el (eglot--change-idle-timer): make a defvar-local
(eglot--after-change): Only run timer if the buffer is live.
João Távora [Sun, 27 May 2018 14:34:50 +0000 (15:34 +0100)]
Make eglot--recent-changes a simpler list
* eglot.el (eglot-server-ready-p): Don't add default method here.
(eglot-server-ready-p): Do it here.
(eglot--outstanding-edits-p): Remove.
(eglot--before-change, eglot--after-change)
(eglot--signal-textDocument/didChange): Use eglot--recent-changes
as a list. Simplify.
(eglot--signal-textDocument/didOpen): Use eglot--recent-changes as
a list.
João Távora [Sun, 27 May 2018 13:53:53 +0000 (14:53 +0100)]
Set eglot--versioned-identifier to 0 on didopen
Else cquery will rightfully complain about this.
* eglot.el (eglot--signal-textDocument/didOpen): Also set
eglot--versioned-identifier to 0.
João Távora [Sun, 27 May 2018 13:17:36 +0000 (14:17 +0100)]
Correctly apply workspace edits in documentchanges form
This was breaking M-x eglot-rename for cquery
* eglot.el (eglot--apply-workspace-edit): Fix and simplify.
João Távora [Sun, 27 May 2018 12:17:07 +0000 (13:17 +0100)]
* eglot.el (version): bump to 0.6
João Távora [Sun, 27 May 2018 11:58:49 +0000 (12:58 +0100)]
Hopefully fix the flymake bootstrap problem
Immediately after M-x eglot, eglot's use of flymake was having trouble
detecting the first diagnostics sent from the server, resulting in an
annoying "Wait" in the mode-line.
* eglot.el (eglot--current-flymake-report-fn): Move up here.
(eglot--managed-mode): Set eglot--current-flymake-report-fn to nil
on teardown.
(eglot--maybe-activate-editing-mode): Simplify.
(eglot-handle-notification textDocument/publishDiagnostics): Set unreported-diagnostics to a cons.
(eglot-handle-notification eglot-rls window/progress): Simplify.
* eglot-tests.el (rls-basic-diagnostics): Simplify test.
João Távora [Sun, 27 May 2018 10:58:41 +0000 (11:58 +0100)]
Set spinner in textdocument/didchange as it matters to rls
Otherwise, the asynch eldoc action will immediately send the
textDocument/documentHighlight requests, without understanding that
they need to be deferred a bit more.
* eglot.el (eglot--signal-textDocument/didChange): Set the spinner
here.
João Távora [Sun, 27 May 2018 10:41:24 +0000 (11:41 +0100)]
Fix assorted cquery-related bugs
Some versions of cquery send a :role key as part of the response to
textDocument/documentHighlight. Ignore it for now.
Also cquery sometimes send 0-length ranges upon which we now fallback
to flymake-diag-region.
Finally, in eglot-eldoc-funciton, the previous hack of calling the
eglot--hover-info outside of the when-buffer-window macrolet contained
a bug. It must be called in the correct buffer. Revert the hack and do
it by querying from eglot.el if ert is running tests.
* eglot.el (eglot--range-region): Return a cons and fallback to
flymake-diag-region if server returned a useless range.
(eglot-handle-notification, eglot--hover-info): Update call to
eglot--range-region.
(eglot-help-at-point): Ensure `eglot--hover-info` runs in right
buffer.
(eglot-eldoc-function): Don't abuse eldoc-last-message like this.
Also update call to eglot--range-region. Consider ert-running-test
(eglot--apply-text-edits): Use pcase-lambda.
(ert): require it.
João Távora [Sat, 26 May 2018 18:29:51 +0000 (19:29 +0100)]
* eglot.el (version): bump to 0.5
João Távora [Sat, 26 May 2018 18:10:45 +0000 (19:10 +0100)]
Merge branch 'cquery-support' into master
The conflicts in eglot.el where fixed by calling the new eglot--debug
helper coming from 'cquery-support'. This helper was converted to
allow a non-string format passed directly to eglot--log-event.
Also fixed some compilation warnings.
* eglot.el (eglot--debug): Allow non-string FORMAT to be a JSON
object. (eglot-handle-notification :$cquery/progress)
(eglot-handle-notification :$cquery/setInactiveRegions)
(eglot-handle-notification :$cquery/publishSemanticHighlighting):
Solve compilation warnings.
João Távora [Sat, 26 May 2018 17:52:17 +0000 (18:52 +0100)]
Really ensure eglot--shutdown deletes a process completely
* eglot.el (eglot-lsp-server): rename slot "moribund" to
"shutdown-requested"
(eglot--connect): Don't check if shutdown was requested here.
(eglot--process-sentinel): Set shutdown-requested to
:sentinel-done here.
(eglot-shutdown): use eglot--shutdown-requested. Improve check
for process liveness.
João Távora [Sat, 26 May 2018 15:37:10 +0000 (16:37 +0100)]
Get rid of eglot--obj, an uninteresting abstraction
* eglot.el (eglot--obj): Get rid of this. It wasn't widely used
anyway.
(eglot-client-capabilities)
(eglot--connect, eglot--async-request, eglot--notify)
(eglot--reply, eglot--pos-to-lsp-position, eglot-handle-request)
(eglot--register-unregister, eglot-handle-request)
(eglot--TextDocumentIdentifier)
(eglot--VersionedTextDocumentIdentifier)
(eglot--TextDocumentItem, eglot--TextDocumentPositionParams)
(eglot--signal-textDocument/didChange)
(eglot--signal-textDocument/didSave)
(xref-backend-identifier-completion-table)
(xref-backend-references, xref-backend-apropos, eglot-imenu)
(eglot-rename): Use list instead of eglot--obj.
João Távora [Sat, 26 May 2018 15:22:46 +0000 (16:22 +0100)]
Cleanup deferred request mechanism with a readable log
* eglot.el (eglot-lsp-server): Rework doc of deferred-actions
slot.
(defvar eglot--next-request-id): Move down, now buffer local.
(defun eglot--next-request-id): Remove.
(eglot--call-deferred): Be more informative.
(eglot--async-request): Simplify.
João Távora [Sat, 26 May 2018 15:13:53 +0000 (16:13 +0100)]
Simpify eglot--server-receive
* eglot.el (eglot--obj): Cleanup whitespace.
(eglot--server-receive): Simplify.
João Távora [Sat, 26 May 2018 15:11:11 +0000 (16:11 +0100)]
Don't rely on flymake's idle timer for textdocument/didchange
* eglot.el (eglot--after-change): Set idle timer here.
(eglot--change-idle-timer): New var.
(eglot--signal-textDocument/didChange): No seed to set spinner here.
(eglot-flymake-backend) Don't send didChange here.
João Távora [Sat, 26 May 2018 00:07:10 +0000 (01:07 +0100)]
Document current api breaches a bit
* eglot-tests.el (eglot--call-with-dirs-and-files)
(auto-reconnect): use eglot--process
* eglot.el (eglot-shutdown, eglot, eglot-reconnect)
(eglot--connect): Use eglot--process
(eglot--process): Alias to concentrate the hack here.
(eglot--signal-textDocument/didChange): Tweak comment.
João Távora [Fri, 25 May 2018 23:29:50 +0000 (00:29 +0100)]
Merge branch use-eieio-server-defclass into jsonrpc-refactor
Josh Elsasser [Fri, 25 May 2018 03:10:15 +0000 (20:10 -0700)]
Log debug messages through eglot--debug
* eglot.el (eglot--async-request, eglot--process-sentinel):
(eglot--call-deferred): Use eglot--debug to log messages to
the server events buffer.
(eglot--server-receive): Demote "Notification unimplemented"
message on missing handlers to a pure debug message.
Josh Elsasser [Tue, 22 May 2018 00:15:12 +0000 (17:15 -0700)]
Demote unvisited diagnostics logging to debug level
The PublishDiagnostic spec (LSP Specification, 3.0) does not
strictly forbid the server from publishing diagnostics before
a file has been visited.
* eglot.el (eglot--server-textDocument/publishDiagnostics): Log
the "received diagnostics for unvisited file" warning as debug
to avoid spamming users of compliant language servers.
Josh Elsasser [Tue, 22 May 2018 00:03:55 +0000 (17:03 -0700)]
Introduce eglot--debug for unimportant messages
* eglot.el (eglot--debug): New function to log noisy or trivial
messages to the eglot events buffer.
Josh Elsasser [Mon, 21 May 2018 19:27:05 +0000 (12:27 -0700)]
Add cquery support for c/c++ projects
Implements minimal support for the core cquery language
server. None of its extensions are implemented yet.
* eglot.el (eglot-server-programs): Add cquery to list
of guessed programs for c-mode and c++-mode.
(eglot-initialization-options eglot-cquery): Specialize init
options to pass cquery a cache directory and disable a flood
of $cquery/progress messages.
(eglot-handle-notification $cquery/publishSemanticHighlighting):
(eglot-handle-notification $cquery/setInactiveRegions):
(eglot-handle-notification $cquery/progress): New no-op functions
to avoid filling logs with "unknown message" warnings.
(eglot-cquery): New eglot-lsp-server subclass.
* README.md: Mention cquery in the README.